﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Linq;
using Sigecov.Models;
namespace Sigecov.Formularios
{
    public partial class FrmCliente : Sigecov.Formularios.FrmBase
    {
        public FrmCliente()
        {
            InitializeComponent();
        }
        private void btnSalvar_Click(object sender, EventArgs e)
        {
            if (_tipoOperacao == "INCLUIR")
            {
                using (SigecovContext DB = new SigecovContext())
                {
                    try
                    {
                        Cliente cliente = new Cliente();
                        if (!((string.IsNullOrWhiteSpace(txtEmpresaCliente.Text))
                            || (string.IsNullOrWhiteSpace(txtLogradouro.Text))
                            || (string.IsNullOrWhiteSpace(txtNumero.Text))
                            || (string.IsNullOrWhiteSpace(txtEmail.Text))
                            || (string.IsNullOrWhiteSpace(txtBairro.Text))
                            || (string.IsNullOrWhiteSpace(txtContato.Text))
                            || string.IsNullOrWhiteSpace(txtCep.Text)))
                        {
                            if (cbxCidade.SelectedItem != null)
                            {
                                var itens = DB.Clientes.Where(c => c.cliEmpresa == txtEmpresaCliente.Text);
                                if (itens.Count() == 0)
                                {
                                    //Setando valores para a classe cliente
                                    cliente.cidId = Convert.ToInt32(cbxCidade.SelectedValue);
                                    cliente.cliBairro = txtBairro.Text;
                                    cliente.cliCargoContato = txtCargoContato.Text;
                                    cliente.cliCep = txtCep.Text;
                                    cliente.cliComplemento = txtComplemento.Text;
                                    cliente.cliContato = txtContato.Text;
                                    cliente.cliEmail = txtEmail.Text;
                                    cliente.cliEmpresa = txtEmpresaCliente.Text;
                                    cliente.cliFax = mtbFax.Text;
                                    cliente.cliLogradouro = txtLogradouro.Text;
                                    cliente.cliNumero = Convert.ToInt32(txtNumero.Text);
                                    cliente.cliTelefone = mtbTelefone.Text;
                                    cliente.cliTipoLogradouro = cbxTipoLogradouro.Text;
                                    //Método para cadastrar um cliente
                                    cliente.Cadastrar(cliente, DB);
                                    MessageBox.Show("Cliente cadastrado com sucesso!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                    Ferramenta.ResetarControles(this.Controls);
                                    txtEmpresaCliente.Focus();
                                }
                                else
                                {
                                    MessageBox.Show("Esse cliente já está cadastrado!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                    txtEmpresaCliente.Clear();
                                    txtEmpresaCliente.Focus();
                                }
                            }
                            else
                            {
                                MessageBox.Show("Por favor informe todos os campos obrigatórios!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                cbxEstado.Focus();
                            }
                        }
                        else
                        {
                            MessageBox.Show("Por favor informe todos os campos obrigatórios!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            txtEmpresaCliente.Focus();
                        }
                    }
                    catch
                    {
                        MessageBox.Show("Falha ao inserir o cliente!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        btnSalvar.Focus();
                    }
                }
            }
            else if (_tipoOperacao == "ALTERAR")
            {
                using (SigecovContext DB = new SigecovContext())
                {
                    try
                    {
                        Cliente cliente = new Cliente();
                        if (!((string.IsNullOrWhiteSpace(txtEmpresaCliente.Text))
                             || (string.IsNullOrWhiteSpace(txtLogradouro.Text))
                             || (string.IsNullOrWhiteSpace(txtNumero.Text))
                             || (string.IsNullOrWhiteSpace(txtEmail.Text))
                             || (string.IsNullOrWhiteSpace(txtBairro.Text))
                             || (string.IsNullOrWhiteSpace(txtContato.Text))
                             || (string.IsNullOrWhiteSpace(txtCep.Text))))
                        {
                            if (cbxCidade.SelectedItem != null)
                            {
                                cliente = DB.Clientes.Find(_idAcao);
                                //Setando valores para a classe cliente
                                cliente.cidId = Convert.ToInt32(cbxCidade.SelectedValue);
                                cliente.cliBairro = txtBairro.Text;
                                cliente.cliCargoContato = txtCargoContato.Text;
                                cliente.cliCep = txtCep.Text;
                                cliente.cliComplemento = txtComplemento.Text;
                                cliente.cliContato = txtContato.Text;
                                cliente.cliEmail = txtEmail.Text;
                                cliente.cliEmpresa = txtEmpresaCliente.Text;
                                cliente.cliFax = mtbFax.Text;
                                cliente.cliLogradouro = txtLogradouro.Text;
                                cliente.cliNumero = Convert.ToInt32(txtNumero.Text);
                                cliente.cliTelefone = mtbTelefone.Text;
                                cliente.cliTipoLogradouro = cbxTipoLogradouro.Text;
                                //Método para cadastrar um cliente
                                cliente.Alterar(cliente, DB);
                                MessageBox.Show("Cliente alterado com sucesso!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                Close();
                            }
                            else
                            {
                                MessageBox.Show("Por favor informe todos os campos obrigatórios!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                txtEmpresaCliente.Focus();
                            }
                        }
                        else
                        {
                            MessageBox.Show("Por favor informe todos os campos obrigatórios!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            txtEmpresaCliente.Focus();
                        }
                    }
                    catch
                    {
                        MessageBox.Show("Falha ao alterar o cliente!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        txtEmpresaCliente.Focus();
                    }
                }

            }
        }

        private void FrmCliente_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the 'dsSigecov.Paises' table. You can move, or remove it, as needed.
            this.paisesTableAdapter.Fill(this.dsSigecov.Paises);
            this.AcaoIncluir();
            if (_tipoOperacao == "INCLUIR")
            {
                this.lblTituloAcao.Text = "Cadastrar Cliente";
                this.paisesTableAdapter.Fill(this.dsSigecov.Paises);
                Ferramenta.ResetarControles(this.Controls);

                this.AcaoIncluir();
            }
            else if (_tipoOperacao == "ALTERAR")
            {
                this.paisesTableAdapter.Fill(this.dsSigecov.Paises);
                cbxPais_SelectedIndexChanged(sender, e);
                this.lblTituloAcao.Text = "Alterar Cliente";
                this.AcaoAlterar();
                using (SigecovContext DB = new SigecovContext())
                {
                    Cliente cliente = DB.Clientes.Find(_idAcao);
                    txtBairro.Text = cliente.cliBairro;
                    txtCargoContato.Text = cliente.cliCargoContato;
                    txtComplemento.Text = cliente.cliComplemento;
                    txtContato.Text = cliente.cliContato;
                    txtEmail.Text = cliente.cliEmail;
                    txtEmpresaCliente.Text = cliente.cliEmpresa;
                    txtLogradouro.Text = cliente.cliLogradouro;
                    txtNumero.Text = Convert.ToString(cliente.cliNumero);
                    txtCep.Text = cliente.cliCep;
                    mtbFax.Text = cliente.cliFax;
                    mtbTelefone.Text = cliente.cliTelefone;
                    cbxTipoLogradouro.SelectedItem = cliente.cliTipoLogradouro;

                    cbxPais.SelectedValue = cliente.Cidade.Estado.Pais.paiId;
                    cbxEstado.SelectedValue = cliente.Cidade.Estado.estId;
                    cbxCidade.SelectedValue = cliente.Cidade.cidId;
                }
            }
            else if (_tipoOperacao == "DELETAR")
            {
                this.paisesTableAdapter.Fill(this.dsSigecov.Paises);
                cbxPais_SelectedIndexChanged(sender, e);
                this.lblTituloAcao.Text = "Deletar Cliente";
                this.AcaoDeletar();
                using (SigecovContext DB = new SigecovContext())
                {
                    Cliente cliente = DB.Clientes.Find(_idAcao);
                    txtBairro.Text = cliente.cliBairro;
                    txtCargoContato.Text = cliente.cliCargoContato;
                    txtComplemento.Text = cliente.cliComplemento;
                    txtContato.Text = cliente.cliContato;
                    txtEmail.Text = cliente.cliEmail;
                    txtEmpresaCliente.Text = cliente.cliEmpresa;
                    txtLogradouro.Text = cliente.cliLogradouro;
                    txtNumero.Text = Convert.ToString(cliente.cliNumero);
                    txtCep.Text = cliente.cliCep;
                    mtbFax.Text = cliente.cliFax;
                    mtbTelefone.Text = cliente.cliTelefone;
                    cbxTipoLogradouro.SelectedItem = cliente.cliTipoLogradouro;

                    cbxPais.SelectedValue = cliente.Cidade.Estado.Pais.paiId;
                    cbxEstado.SelectedValue = cliente.Cidade.Estado.estId;
                    cbxCidade.SelectedValue = cliente.Cidade.cidId;
                    Ferramenta.DesativarControles(this.Controls);
                }
            }
        }

        private void btnSair_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void cbxPais_SelectedIndexChanged(object sender, EventArgs e)
        {
            cbxEstado.DataSource = Estado.ListarEstado(Convert.ToInt32(cbxPais.SelectedValue));
            cbxEstado.DisplayMember = "estNome";
            cbxEstado.ValueMember = "estId";
        }

        private void cbxEstado_SelectedIndexChanged(object sender, EventArgs e)
        {
            cbxCidade.DataSource = Cidade.ListarCidade(Convert.ToInt32(cbxEstado.SelectedValue));
            cbxCidade.DisplayMember = "cidNome";
            cbxCidade.ValueMember = "cidId";
        }

        private void btnDeletar_Click(object sender, EventArgs e)
        {
            if (_tipoOperacao == "DELETAR")
            {
                using (SigecovContext DB = new SigecovContext())
                {
                    try
                    {
                        DialogResult confirmar = MessageBox.Show("Deseja deletar o cliente "+txtEmpresaCliente.Text.ToUpper()+"?", "Aviso", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                        if (confirmar.ToString().ToUpper() == "YES")
                        {
                            Cliente cliente = new Cliente();
                            cliente = DB.Clientes.Find(_idAcao);
                            cliente.Deletar(cliente, DB);
                            MessageBox.Show("Cliente deletado com sucesso!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            Close();
                        }
                    }
                    catch
                    {
                        MessageBox.Show("Falha ao deletar o cliente!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        btnDeletar.Focus();
                    }
                }
            }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            Ferramenta.ResetarControles(this.Controls);
        }

        private void txtCep_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (cbxPais.Text == "Brasil")
            {
                txtCep.MaxLength = 8;
                Ferramenta.SomenteNumero(e);
            }
            else
                txtCep.MaxLength = 10;
        }

        private void txtNumero_KeyPress(object sender, KeyPressEventArgs e)
        {
            Ferramenta.SomenteNumero(e);
        }

        private void btnPesquisarCep_Click(object sender, EventArgs e)
        {
            bool existeConexao = Ferramenta.VerificarConexaoInternet();
            bool enderecoEncontrado = false;
            bool problemaConexao = false;
            string mensagemConexao = "";
            if (existeConexao)
            {
                if (cbxPais.Text == "Brasil")
                {
                    Dictionary<string, string> endereco = Ferramenta.BuscarCep(txtCep.Text);

                    foreach (var item in endereco)
                    {
                        if (item.Key == "conexao")
                        {
                            mensagemConexao = item.Value;
                            problemaConexao = true;

                        }
                        if (item.Key == "logradouro")
                        {
                            if (item.Value == "")
                                enderecoEncontrado = false;
                            else
                                enderecoEncontrado = true;
                        }
                    }
                    if (!(problemaConexao))
                    {
                        if (enderecoEncontrado)
                        {
                            foreach (var item in endereco)
                            {
                                if (item.Key == "tipoLogradouro")
                                    cbxTipoLogradouro.SelectedItem = item.Value;
                                else if (item.Key == "logradouro")
                                    txtLogradouro.Text = item.Value;
                                else if (item.Key == "bairro")
                                    txtBairro.Text = item.Value;
                                else if (item.Key == "cidade")
                                {
                                    cbxCidade.Items.Add(item.Value);
                                    cbxCidade.SelectedItem = item.Value;
                                }
                                else
                                {
                                    cbxEstado.Text = item.Value;
                                    cbxEstado.SelectedItem = item.Value;
                                }
                            }
                        }
                        else
                        {
                            MessageBox.Show("Endereço não encontrado com o cep informado!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            txtCep.Focus();
                        }
                    }
                    else
                    {
                        MessageBox.Show(mensagemConexao, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        txtCep.Focus();
                    }
                }
                else
                {
                    MessageBox.Show("A busca de cep só funciona para os estados brasileiros!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    txtCep.Focus();
                }
            }
            else
            {
                MessageBox.Show("Sem conexão com internet!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtCep.Focus();
            }
        }
    }
}
